package com.powernode.config;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * Minio的配置类，用于获取Minio的客户端对象
 * 因为该配置类位于公共模块中，所以不能加@Configuration注解，因为要导入公共模块依赖的微服务不一定需要用到文件上传，所以就不会在配置文件中配置要求的参数
 * 因此该配置类的使用属于单例模式，需要使用的微服务手动注入（在启动类上加@Import(MinioConfig.class)）加载到ioc容器中初始化对象并对属性赋值
 * 加@Data注解是因为Minio的工具类中需要使用配置类的成员变量
 **/
//@Configuration
@Data
public class MinioConfig {
    //yml的表达式${},需要引入minio服务的微服务需要在配置文件中配置相应参数的值
    @Value("${minio.endpoint}")
    private String endpoint;

    @Value("${minio.access_key}")
    private String access_key;

    @Value("${minio.secret_key}")
    private String secret_key;

    @Value("${minio.bucket_name}")
    private String bucket_name;

    /**
     * 获取Minio客户端对象，该对象可以进行文件上传和删除操作，加@Bean注解能够被其他服务注入创建对象，属于单例模式
     **/
    @Bean
    public MinioClient minioClient(){
        return MinioClient.builder().endpoint(endpoint).credentials(access_key,secret_key).build();
    }
}
